
import java.io.*; import java.util.*;

public class Caf implements Serializable {
	
	//Attributs
	//Dernier numéro de moniteur ; permet de générer automatiquement l'id d'un moniteur
	private int derNumMonit; 
	//Dernier numéro d'activité ; permet de générer automatiquement l'id d'une activité
	private int derNumAct; 

	private HashMap<Integer, Moniteur> lesMoniteurs;
	private HashMap<String, Adherent> lesAdherents;
	private HashMap<Integer, Activite> lesActivites;

	//Constructeur
	public Caf() {
		this.setMoniteurs(new HashMap<Integer, Moniteur>());
		this.setAdherents(new HashMap<String, Adherent>());
		this.setActivites(new HashMap<Integer, Activite>());
	}

	//Affecteurs
	private void setDerNumMonit(int num){
		derNumMonit = num;
	}
 
	private void setDerNumAct(int num){
		derNumAct = num;
	}

	public void setMoniteurs(HashMap<Integer, Moniteur> moniteurs){
		lesMoniteurs = moniteurs;
	}

	public void setAdherents(HashMap<String, Adherent> adherents){
		lesAdherents = adherents;
	}

	public void setActivites(HashMap<Integer, Activite> activites){
		lesActivites = activites;
	}

	// Méthodes d'ajout d'un élément à l'ensemble
	private void lierMoniteur(Moniteur m, int num) {
		getMoniteurs().put(num, m);
	}

	private void lierAdherent(Adherent a, String num) {
		getAdherents().put(num, a);
	}

	private void lierActivite(Activite a, int num) {
		getActivites().put(num, a);}

	
		
	//Accesseurs
	public int getDerNumMoniteur(){
		return derNumMonit;
	}

	public int getDerNumActivite(){
		return derNumAct;
	}

	public HashMap<Integer, Moniteur> getMoniteurs(){
		return lesMoniteurs;
	}

	public HashMap<String, Adherent> getAdherents(){
		return lesAdherents;
	}

	public HashMap<Integer, Activite> getActivites(){
		return lesActivites;
	}

	public Moniteur getMoniteur(int numero){
		return getMoniteurs().get(numero);
	}

	public Adherent getAdherent(String n){
		return getAdherents().get(n);
	}

	public Activite getActivite(int numero){
		return getActivites().get(numero);
	}

	// Traitement
	public void nouveauMoniteur() {
		// Création d'un nouveau moniteur
		EntreesSorties.afficherMessage("Ajout d'un moniteur");
		
		int numero = this.genererNumMonit();
		EntreesSorties.afficherMessage("Le numero du moniteur sera le : " + numero);
			
		EntreesSorties.afficherMessage("Nom : ");
		String nom = EntreesSorties.lireChaine();

		EntreesSorties.afficherMessage("Prenom :");
		String prenom = EntreesSorties.lireChaine();

		EntreesSorties.afficherMessage("Adresse :");
		String adresse = EntreesSorties.lireChaine();

		EntreesSorties.afficherMessage("Diplome :");
		String diplome = EntreesSorties.lireChaine();

		Moniteur monit = new Moniteur(nom, prenom, adresse, numero, diplome);
		this.lierMoniteur(monit, numero);
		EntreesSorties.afficherMessage("Création du moniteur OK");
	}

	public void nouvelAdherent() {
		// Création d'un nouvel adhérent
		EntreesSorties.afficherMessage("Ajout d'un adhérent");

		EntreesSorties.afficherMessage("Nom : ");
		String nom = EntreesSorties.lireChaine();

		EntreesSorties.afficherMessage("Prenom :");
		String prenom = EntreesSorties.lireChaine();

		EntreesSorties.afficherMessage("Adresse :");
		String adresse = EntreesSorties.lireChaine();

		EntreesSorties.afficherMessage("Numéro SS :");
		String nSS = EntreesSorties.lireChaine();

		Adherent adher = new Adherent(nom, prenom, adresse, nSS);
		this.lierAdherent(adher, nSS);
		EntreesSorties.afficherMessage("Création de l'adhérent OK");
	}

	public void nouvelleActivite() {
		// Création d'une nouvelle activité
		EntreesSorties.afficherMessage("Ajout d'une activité");

		int num = this.genererNumAct();
		
		EntreesSorties.afficherMessage("Le numero de l'activité sera le :" + num);
		
		EntreesSorties.afficherMessage("Type d'activité :");
		String typea = EntreesSorties.lireChaine();

		EntreesSorties.afficherMessage("Type de ski :");
		String types = EntreesSorties.lireChaine();

		EntreesSorties.afficherMessage("Date :");
		GregorianCalendar d = EntreesSorties.lireDate();

		Activite acti = new Activite(num, typea, types, d);
		this.lierActivite(acti, num);
		EntreesSorties.afficherMessage("Création de l'activité OK");
	}
	
	private int genererNumMonit(){
		this.setDerNumMonit(this.getDerNumMoniteur() + 1);
		return this.getDerNumMoniteur();
	}

	private int genererNumAct(){
		this.setDerNumAct(this.getDerNumActivite() + 1);
		return this.getDerNumActivite();
	}
}


